{
 "nbformat": 4,
 "nbformat_minor": 2,
 "metadata": {
  "language_info": {
   "name": "python",
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "version": "3.7.4-final"
  },
  "orig_nbformat": 2,
  "file_extension": ".py",
  "mimetype": "text/x-python",
  "name": "python",
  "npconvert_exporter": "python",
  "pygments_lexer": "ipython3",
  "version": 3,
  "kernelspec": {
   "name": "python37464bitvenv3venve864f70b47a24f709eace0523e013bb0",
   "display_name": "Python 3.7.4 64-bit ('venv3': venv)"
  }
 },
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "%matplotlib inline\n",
    "%config InlineBackend.figure_format ='retina'\n",
    "\n",
    "import io\n",
    "import json\n",
    "import logging\n",
    "import os\n",
    "\n",
    "import torch\n",
    "\n",
    "import openpifpaf\n",
    "import openpifpaf.eval_coco\n",
    "\n",
    "CWD = os.path.join(os.path.dirname(openpifpaf.__file__), '..')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Instance Scale Distribution with Training and Eval Setting"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "from pythonjsonlogger import jsonlogger\n",
    "\n",
    "STATS_STREAM = io.StringIO()\n",
    "stream_handler = logging.StreamHandler(STATS_STREAM)\n",
    "stream_handler.setFormatter(jsonlogger.JsonFormatter('(message)'))\n",
    "stream_handler.setLevel(logging.DEBUG)\n",
    "\n",
    "logger = logging.getLogger('openpifpaf.stats')\n",
    "logger.setLevel(logging.DEBUG)\n",
    "logger.addHandler(stream_handler)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "output_type": "stream",
     "name": "stdout",
     "text": "loading annotations into memory...\nDone (t=10.63s)\ncreating index...\nindex created!\n"
    }
   ],
   "source": [
    "train_preprocess = openpifpaf.datasets.train_preprocess_factory('cocokp', square_edge=385)\n",
    "train_data = openpifpaf.datasets.Coco(\n",
    "    image_dir=os.path.join(CWD, openpifpaf.datasets.factory.IMAGE_DIR_TRAIN),\n",
    "    ann_file=os.path.join(CWD, openpifpaf.datasets.factory.ANNOTATIONS_TRAIN),\n",
    "    preprocess=train_preprocess,\n",
    "    image_filter='keypoint-annotations',\n",
    "    category_ids=[1],\n",
    "    n_images=500,\n",
    ")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "tags": [
     "outputPrepend"
    ]
   },
   "outputs": [
    {
     "output_type": "stream",
     "name": "stdout",
     "text": "0\n50\n100\n150\n200\n250\n300\n350\n400\n450\n"
    }
   ],
   "source": [
    "logging.getLogger('openpifpaf.stats').debug({'data': 'train'})\n",
    "for sample_i, _ in enumerate(train_data):\n",
    "    if sample_i % 50 == 0:\n",
    "        print(sample_i)\n",
    "stream_handler.flush()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "output_type": "stream",
     "name": "stdout",
     "text": "loading annotations into memory...\nDone (t=9.88s)\ncreating index...\nindex created!\n"
    }
   ],
   "source": [
    "eval_data = openpifpaf.datasets.Coco(\n",
    "    image_dir=os.path.join(CWD, openpifpaf.datasets.factory.IMAGE_DIR_TRAIN),\n",
    "    ann_file=os.path.join(CWD, openpifpaf.datasets.factory.ANNOTATIONS_TRAIN),\n",
    "    preprocess=openpifpaf.eval_coco.preprocess_factory(641, tight_padding=True),\n",
    "    image_filter='keypoint-annotations',\n",
    "    category_ids=[1],\n",
    "    n_images=500,\n",
    ")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "output_type": "stream",
     "name": "stdout",
     "text": "0\n50\n100\n150\n200\n250\n300\n350\n400\n450\n"
    }
   ],
   "source": [
    "logging.getLogger('openpifpaf.stats').debug({'data': 'eval'})\n",
    "for sample_i, _ in enumerate(eval_data):\n",
    "    if sample_i % 50 == 0:\n",
    "        print(sample_i)\n",
    "stream_handler.flush()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "output_type": "stream",
     "name": "stdout",
     "text": "loading annotations into memory...\nDone (t=11.97s)\ncreating index...\nindex created!\n0\n50\n100\n150\n200\n250\n300\n350\n400\n450\n"
    }
   ],
   "source": [
    "evalext_data = openpifpaf.datasets.Coco(\n",
    "    image_dir=os.path.join(CWD, openpifpaf.datasets.factory.IMAGE_DIR_TRAIN),\n",
    "    ann_file=os.path.join(CWD, openpifpaf.datasets.factory.ANNOTATIONS_TRAIN),\n",
    "    preprocess=openpifpaf.eval_coco.preprocess_factory(321, tight_padding=True),\n",
    "    image_filter='keypoint-annotations',\n",
    "    category_ids=[1],\n",
    "    n_images=500,\n",
    ")\n",
    "logging.getLogger('openpifpaf.stats').debug({'data': 'eval321'})\n",
    "for sample_i, _ in enumerate(evalext_data):\n",
    "    if sample_i % 50 == 0:\n",
    "        print(sample_i)\n",
    "stream_handler.flush()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [],
   "source": [
    "data = {'train': [], 'eval': [], 'eval321': []}\n",
    "current_dataset = None\n",
    "for line in STATS_STREAM.getvalue().splitlines():\n",
    "    line = json.loads(line)\n",
    "    if 'data' in line:\n",
    "        current_dataset = line['data']\n",
    "    if current_dataset not in data:\n",
    "        continue\n",
    "    if 'bbox' in line:\n",
    "        data[current_dataset].append(line['bbox'][3])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "output_type": "display_data",
     "data": {
      "text/plain": "<Figure size 720x432 with 1 Axes>",
      "image/png": "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Fyvz3H1pCrsBAAAAgA5wyimn5LOf/Wze+973rumt0AbtFiIDAAAAACytd+/e6d2795reBm3U5g/WAwAAAADWfg0NDdl2222TJOPHj08ppeXr2muvzeTJk1NKSUNDQ6ZOnZqDDjoovXr1Sikls2bNSpJMmjQpJ554YnbZZZf06NEj3bp1y4ABAzJ27NgsWLBghWuWUjJ58uRW46WU7LfffnnppZdy4okn5t3vfnc23njj7Lrrrrnmmms6+kfB2+QkMgAAAABsAPbbb7+88sorGTduXHbfffd85jOfaZkbOHBgXnnllSTJAw88kAsvvDAf+chHcvzxx+ell15K165dkyQXX3xxHn/88ey777456KCDsmDBgtx3331paGjI5MmT85vf/CYbbbTRSu3nlVdeyeDBg9O1a9ccdthhWbhwYX7+85/n+OOPT6dOnXLccct+DBprihAZAAAAADYA++23X/r165dx48Zl4MCBaWhoaDW/5LTwhAkTcuWVV2bkyJHL1bjiiiuy7bbbppTWH3k2ZsyYnHfeebnxxhtzxBFHrNR+fv/73+eEE07ID37wg5bg+fTTT89uu+2Wiy++WIi8FtHOAgAAAABoMXDgwBUGyEmy3XbbLRcgJ8moUaOSJHfeeedKr7PpppvmkksuaXVyeZdddsngwYMzffr0vPbaa29z53QUITIAAAAA0OJDH/pQ7dz8+fNzwQUX5IMf/GB69uyZTp06pZSSd77znUmSZ599dqXX2WGHHdKjR4/lxrfZZpskyf/8z/+8zZ3TUbSzAAAAAABa9OnTZ4XjjY2NGTp0aKZOnZoBAwbkiCOOyJZbbpkuXbokScaOHZuFCxeu9DrveMc7VjjeuXNTZLlo0aK3uXM6ihAZAAAAAGixonYVSXLLLbdk6tSpGTFiRK655ppWc88991zGjh27OrbHGqCdBQAAAABsIJb0H16VU75PPvlkkmT48OHLzU2ZMqVtG2OtJkQGAAAAgA3EFltskVJKZs+e/baf7devX5Jk8uTJrcZnzpyZr371q+2wO9ZW2lkAAAAAwAZis802y95775177rknRx11VHbcccdstNFGOeSQQ97y2YMPPjjbb799Lrnkkjz22GPZY489Mnv27Nx222056KCDVimYZt0gRAYAAACADciPf/zjjBo1KnfccUeuv/76VFWVvn37tpw0rtO9e/dMnDgxo0ePzuTJk3PPPfdku+22y5gxY3LGGWfkhhtuWD0vwGpXqqpa03tY75RSpu255557Tps2bU1vBQAAAIAk06dPT5LsvPPOa3gn0L5W9nd70KBBeeSRRx6pqmrQ211DT2QAAAAAAGppZ8HaraHnGlhz7upfEwAAAADWUk4iAwAAAABQS4gMAAAAAEAtITIAAAAAALX0RGbd0hH9itdE32UAAAAAWEc4iQwAAAAAQC0hMgAAAAAAtYTIAAAAAADUEiIDAAAAAFBLiAwAAAAAQC0hMgAAAAAAtTqv6Q0AAAAAwJrUb/Sv1/QW3pZZFx20prfABsZJZAAAAABgjWloaEgpJZMnT17TW6GGEBkAAAAAWOfMnTs3Z599dnbbbbdsttlm6dGjRwYMGJCRI0emsbHxTZ+dMWNGunfvnlJKjj766BXe8+///u8ZOXJk9t5772y66aYppeSss87qiFdZ62lnAQAAAACsUx5//PEccMABefbZZ/Pxj388Bx54YBobGzNr1qz8x3/8R7797W+nS5cuK3z2jTfeyDHHHJNOnd78fO2ZZ56ZuXPnZosttsh73vOePPXUUx3xKusEITIAAAAALGVt6zm8rvVs7mivv/56DjnkkMybNy/33Xdf9tlnn1bzb7zxRjbaaKPa5y+44II8+uij+eY3v5nTTjut9r6f/exn2XnnnfO+970v1157bT7/+c+32zusa7SzAAAAAIANzEMPPZTDDjssffr0SdeuXbPNNttk5MiR+etf/9rqvv79+6dr16556aWXVljn4osvTikll19+ecvYpEmTcuKJJ2aXXXZJjx490q1btwwYMCBjx47NggUL2rz3K6+8Mk888UQuvPDC5QLkJOncuXNKKSt89ne/+13OPffcjBkzJrvtttubrjNs2LC8733vW+l9Ld3befz48dljjz3SrVu3bLXVVjn++OPz/PPPt7r/F7/4RUop2WeffZZrv/HHP/4xm266ad7znvfkhRdeWOk9dBQhMgAAAABsQK6++uoMHjw4t99+e4YMGZLTTz89e+21V6666qrstddemT17dsu9xx13XBobG3P99devsNb48ePTtWvXHHnkkS1jF198cSZMmJCBAwdm5MiR+cIXvpCuXbumoaEhBx54YBYtWtSm/V933XUppeSzn/1sZs2ale9///u58MIL89Of/jQvv/xy7XN/+9vfcswxx2TgwIEZPXp0m/bwZr7zne/kpJNOyu67757TTz89O+20U6655prsu+++efHFF1vuGz58eE4++eQ89NBD+frXv94y/vrrr+fwww/PwoUL89Of/jRbbbVVh+11ZWlnAQAAAAAbiBkzZuSkk05Kv379MmXKlGy99dYtc3fffXcOOOCAnHbaabn55puTJMccc0zOOuusjB8/Pl/+8pdb1Xr44Yczffr0DB8+PL169WoZv+KKK7Ltttsudxp4zJgxOe+883LjjTfmiCOOWKX9NzY25ve//3223HLL/OhHP8rXvva1vPHGGy3z3bt3z6WXXprjjz9+uWdHjx6dp59+Oo888kg6d+64WPT222/PQw89lD322KNlbNSoUfnud7+b0aNH59///d9bxr/97W/n/vvvz7e+9a0MHTo0w4YNy8knn5zp06fn7LPPzpAhQzpsn2+Hk8gAAAAAsIH4/ve/n8bGxowbN65VgJwk+++/fw455JDceuutmTdvXpKkb9++2X///TNt2rT86U9/anX/+PHjkzSdVl7adtttt8J2EqNGjUqS3Hnnnau8/zlz5uSNN97Iyy+/nH/913/NmDFj8pe//CUvvfRSrrrqqpRS8oUvfCETJ05s9dzdd9+dyy67LN/4xjeyyy67rPL6K+OYY45pFSAnTa0uevbsmeuuuy4LFy5sGd94441zww03pHv37jn22GPzrW99K9dee20++tGP5uyzz+7Qfb4dTiIDAAAAwAbigQceSJJMmTIlDz/88HLzL7zwQhYtWpQZM2Zk0KBBSZIRI0bkrrvuyvjx4/Nv//ZvSZK///3vuf7667PVVlvlk5/8ZKsa8+fPz7hx43LzzTdnxowZmTdvXqqqapl/9tlnV3n/ixcvTpIsWrQoI0eObBW0nnDCCXn99ddz6qmn5uKLL87QoUOTJK+88kpGjBiRvffeO2eeeeYqr72yPvaxjy031rNnzwwcODBTpkzJ9OnTM3DgwJa5HXbYIVdeeWWOPvrofOUrX0nv3r1z3XXXvemHA65uQmQAAAAA2EAs6Rn8zW9+803ve+2111r+fOihh6ZHjx75yU9+kgsvvDAbbbRRbrvttsyZMyenn356q9YQjY2NGTp0aKZOnZoBAwbkiCOOyJZbbpkuXbokScaOHdvqJO7b1bNnz1b7Wtahhx6aU089NVOnTm0ZO+OMM/Lyyy/nN7/5zWoJZt/1rnetcLxPnz5Jkrlz5y43d8ABB6RHjx559dVX84//+I/LnRJf07SzAAAAAIANxJIQdu7cuamqqvZr6dO03bp1y+GHH57nnnsud911V5L6Vha33HJLpk6dmhEjRuSxxx7LD3/4w5x//vlpaGjIyJEj27z/TTfdNNtss02S5B3veMdy81tssUWSpg/RW+KRRx7J3/72t/Tv3z+llJavJf2Gf/rTn6aU0up0cFv893//9wrHn3/++SStg/Akqaoqxx57bF599dX07t07P/zhD/Pb3/62XfbSXoTIAAAAALCB2GeffZIk99xzz9t6bsSIEUmawuMXX3wxt99+e3bbbbflgtcnn3wySTJ8+PDlakyZMmUVdry8j3/840mSP/7xj8vNLRnbdtttW8aGDx+eE044YbmvJW043v/+9+eEE05Y4Z5XxYrec+7cuXn00UezySabZOedd241981vfjN33HFHjjrqqEycODFdunTJkUce2XJqfG0gRAYAAACADcQpp5ySLl26ZNSoUZkxY8Zy83//+99XGDAPHjw4O+ywQ2655ZZceeWVaWxsbAmWl9avX78kyeTJk1uNz5w5M1/96lfb4xVy8sknp1OnTrnooovy4osvtowvWLAgX//615Mkn/vc51rGzz777Fx11VXLfX3lK19J0hSsX3XVVe32QXY//vGP85//+Z+txhoaGjJ37tx87nOfy8Ybb9wy/uCDD+brX/96tt9++3z/+9/PBz7wgXznO9/Js88+m+OOO65VL+k1SU9kAAAAAFhKv9G/XtNb6DD9+/fP1VdfneOPPz677rprhg0blh133DGNjY2ZPXt27rnnnmy55ZZ5/PHHl3v22GOPzZgxY3Luueemc+fOOeqoo5a75+CDD87222+fSy65JI899lj22GOPzJ49O7fddlsOOuigzJ49u83vMGjQoJxzzjk555xzMmDAgBxyyCHZZJNNcuedd+aJJ57Ivvvum3/5l39p8zpXXXVV7r333iT/e8L61ltvzTPPPJOk6Wc5evTo5Z478MADM3jw4Bx++OF597vfnXvvvTf33ntv+vXrl4suuqjlvldeeSWf+9zn0qlTp/zsZz/L5ptvniQ56aSTcvfdd+fGG2/MJZdcslo+DPCtOIkMAAAAABuQo48+OtOmTctRRx2VP/zhD7n88svzk5/8JE8++WQOO+ywXHHFFSt87thjj02nTp3S2NiYYcOGZauttlrunu7du2fixIk58sgj86c//SmXXnpp/vCHP2TMmDH5yU9+0m7vcPbZZ+emm27KTjvtlBtuuCE/+tGP0qVLl5x33nmZOHFiNtlkkzavce+992b8+PEZP3587rvvviTJH/7wh5axO+64Y4XPjRo1KldccUUeffTRfPe7383jjz+eESNG5P7772/1MzvhhBMya9asXHTRRRk0aFCrGldddVW23Xbb/Ou//murDwlcU8raciR6fVJKmbbnnnvuOW3atDW9lXVfQ89lvl/+0yvXiTUAAACANWr69OlJslw/2mTdO3k866KD1vQWWIGGhoaMHTs2kyZNyn777bfa1n2z3+2lDRo0KI888sgjVVUNetMbV8BJZAAAAAAAaumJDAAAAMAGzcleeHNOIgMAAAAAUEuIDAAAAADQRg0NDamqarX2Q15dhMgAAAAAANQSIgMAAAAAUEuIDAAAAABALSEyAAAAAAC1hMgAAAAAANTqvKY3AOu9hp6reb25q3c9AAAAANZrTiIDAAAAAFBLiAwAAAAAQC3tLAAAAADYsK3uVpRtpZUlq5kQGVa39v4X/br2X3QAAAAAS2loaMjYsWMzadKk7Lfffmt6O6yAdhYAAAAAwDrjt7/9bY455pgMGDAg73znO7PJJptk2223zSGHHJK77757ufsbGxtz880354QTTsiAAQPSo0ePbLrppvnABz6Qs88+O/PmzVvhOjfeeGO+/OUv5x/+4R/So0ePlFJy9NFHd/TrrZWcRAYAAAAA1hkTJ07MxIkTs/fee2fo0KHp3r17Zs+enV/96le59dZbc9ZZZ+Xcc89tuf+pp57K8OHD07179wwZMiQHHXRQXnvttdx5550599xzc8MNN+S+++5L7969W61z3nnn5fe//30222yz9O3bN48//vjqftW1hhAZAAAAAJa2tvUc1sqyldGjR6ehoWG58WeffTZ77rlnLrjggnzpS1/Ku9/97iTJ5ptvnu9973s57rjj0r1795b7//73v2f48OH59a9/nbFjx+ayyy5rVe873/lO+vbtm+233z5TpkzJkCFDOvS91mbaWQAAAADABuahhx7KYYcdlj59+qRr167ZZpttMnLkyPz1r39tdV///v3TtWvXvPTSSyusc/HFF6eUkssvv7xlbNKkSTnxxBOzyy67pEePHunWrVsGDBiQsWPHZsGCBW3e+yabbLLC8a233jr77rtvFi9enJkzZ7Ya/9KXvtQqQE6Srl275mtf+1qSZPLkycvVGzJkSHbYYYeUUlZqX9dee21KKbn22mvz61//Ovvuu2+6d++eLbbYIocddlieeOKJVvc/9NBD6dq1a7bbbrvMndv6Ly6ee+65vOtd78pmm222VpyAFiIDAAAAwAbk6quvzuDBg3P77bdnyJAhOf3007PXXnvlqquuyl577ZXZs2e33HvcccelsbEx119//QprjR8/Pl27ds2RRx7ZMnbxxRdnwoQJGThwYEaOHJkvfOEL6dq1axoaGnLggQdm0aJFHfJeL7zwQh566KFsvPHG2WmnnVbqmS5duiRJOnduv4YNv/jFL/KZz3wmffv2zWmnnZYPf/jDuemmm7LPPvvkz3/+c8t9e++9dy644II8/fTT+eIXv9gyvnjx4hx11FF54YUX8r3vfS/9+/dvt72tKu0sAAAAAGADMWPGjJx00knp169fpkyZkq233rpl7u67784BBxyQ0047LTfffHOS5JhjjslZZ52V8ePH58tf/nKrWg8//HCmT5+e4cOHp1evXi3jV1xxRbbddtvlTvCOGTMm5513Xm688cYcccQRbX6X3/3ud7ntttvyxhtv5Jlnnsmtt96auXPn5rLLLluuv3Gdq6++OkkybNiwNu9niVtvvTW33nprPvWpT7WMjRs3Lqeffnq+9KUvtfrwvzPPPDOTJk3Kz3/+8/zgBz/IyJEjc+6552bSpEk59thjc9xxx7XbvtrCSWQAAAAA2EB8//vfT2NjY8aNG9cqQE6S/fffP4ccckhuvfXWzJs3L0nSt2/f7L///pk2bVr+9Kc/tbp//PjxSbJc0LnddtutsAXEqFGjkiR33nlnu7zL7373u4wdOzbnn39+xo8fn8bGxlxzzTX5p3/6p5V6/le/+lV+8IMfpG/fvvmXf/mXdtlTkgwdOrRVgJwkp5xySt7//vdn4sSJ+a//+q+W8VJKxo8fn6233jqnn356vve97+Xcc8/NTjvtlCuuuKLd9tRWTiIDAAAAwAbigQceSJJMmTIlDz/88HLzL7zwQhYtWpQZM2Zk0KBBSZIRI0bkrrvuyvjx4/Nv//ZvSZo+lO7666/PVlttlU9+8pOtasyfPz/jxo3LzTffnBkzZmTevHmpqqpl/tlnn22XdznppJNy0kknZcGCBXn66adz5ZVX5thjj819992XK6+88k2fvf/++3PkkUeme/fuuemmm7LFFlu0y56S5GMf+9hyYxtttFE+8pGP5Kmnnsp//ud/5n3ve1/LXO/evXPddddl6NChOeWUU7LJJpvkhhtuWK6H85okRAYAAACADcTLL7+cJPnmN7/5pve99tprLX8+9NBD06NHj/zkJz/JhRdemI022ii33XZb5syZk9NPP71VP+HGxsYMHTo0U6dOzYABA3LEEUdkyy23bOk9PHbs2CxcuLBd32mTTTbJzjvvnHHjxmXhwoX5wQ9+kI9//OM57LDDVnj/Aw88kAMPPDCdOnXK7bffng996EPtup93vetdKxzv06dPkiz3IXpJ8qEPfSjvfe978/TTT2fIkCHZfffd23VPbaWdBQAAAABsIHr27JmkKcisqqr2a+nTtN26dcvhhx+e5557LnfddVeS+lYWt9xyS6ZOnZoRI0bkscceyw9/+MOcf/75aWhoyMiRIzv8/Q488MAkyeTJk1c4f8899+QTn/hESimZMGFCBg8e3O57+O///u8Vjj///PNJ/vc/g6Wddtppefrpp9O7d+/cfvvt+elPf9ru+2oLITIAAAAAbCD22WefJE1h6tsxYsSIJE3h8Ysvvpjbb789u+22WwYOHNjqvieffDJJMnz48OVqTJkyZRV2/PYsaZWx9OnoJSZOnJhhw4alc+fOueuuu1p+Fu1tRe+5aNGi3HvvvUmSPfbYo9Xcf/zHf+SHP/xhPvrRj+aRRx7JlltumZNOOilPPPFEh+xvVQiRAQAAAGADccopp6RLly4ZNWpUZsyYsdz83//+9xUGzIMHD84OO+yQW265JVdeeWUaGxtbguWl9evXL8nyJ4FnzpyZr371q+3xCpk6deoKx5966qlccMEFSZKDDjqo1dyECRPyqU99Kt26dcvdd9+dD37wg+2ylxWZOHFibrvttlZjl19+eZ566qkMGTKkVT/kmTNn5otf/GLe+c535rrrrss222yT8ePHZ/78+TniiCPavfXHqtITGQAAAACW1rB8u4H1Rf/+/XP11Vfn+OOPz6677pphw4Zlxx13TGNjY2bPnp177rknW265ZR5//PHlnj322GMzZsyYnHvuuencuXOOOuqo5e45+OCDs/322+eSSy7JY489lj322COzZ8/ObbfdloMOOiizZ89u8zsccMAB2WqrrbLHHntkm222yRtvvJGnnnoqd9xxR9544418+ctfzv/5P/+n5f4///nP+fSnP50FCxbkk5/8ZG655Zbccssty9VtaGho9f0vf/nL/PKXv0zyv60oHnjggZbwvHfv3vnWt761wp/BoYcemkMPPTTbb799Hn300dx+++3p1atXrrjiipb7Ghsb89nPfjavvvpqfvWrX2XrrbdO0tSS48wzz8y3vvWt/PM//3Muu+yyNv282oMQGQAAAAA2IEcffXR23333fPvb38KmyN8AACAASURBVM6kSZMyYcKEdO/ePe95z3ty2GGH5Ygjjljhc8cee2zOOeecNDY25lOf+lS22mqr5e7p3r17Jk6cmNGjR2fy5Mm55557st1222XMmDE544wzcsMNN7R5/9/4xjcyYcKEPPjgg7n11luzaNGivOtd78pnPvOZfOELX8gnPvGJVvc/99xzWbBgQZLkpptuyk033bTCusuGyI8++mhL7+clZs6cmZkzZyZJ3ve+960wRB4+fHhOPPHEnH/++fn1r3+dLl26ZPjw4bnwwguz4447ttw3evToPPzwwzn11FNz8MEHt6pxwQUX5Le//W0uv/zyDB06NIceeujK/XA6SKmqao1uYH1USpm255577jlt2rQ1vZV137J/89ew/KdXrvVrrOv1AQAAYD0wffr0JMnOO++8/OS6dvLY//ZfK1177bX5/Oc/n2uuuWaFrT46ypv+bi9l0KBBeeSRRx6pqmrQ211DT2QAAAAAAGppZwEAAADAhs3JXnhTTiIDAAAAAFDLSWQAAAAAgDYaMWLEau2FvDo5iQwAAAAAQC0hMgAAAAAAtYTIAAAAAADroKqqVss6QmQAAAAA1nullCTJ4sWL1/BOoP0sCZGX/H53FCEyAAAAAOu9jTfeOEkyf/78NbwTaD9Lfp+X/H53FCEyAAAAAOu9zTffPEny/PPPZ968eVm8ePFqawUA7amqqixevDjz5s3L888/n+R/f787SucOrQ4AAAAAa4FevXpl/vz5ef311/PMM8+s6e1Au9l0003Tq1evDl1DiAwAAADAeq9Tp07ZZpttMmfOnMybNy8LFy50Epl1ViklG2+8cTbffPP06tUrnTp1bMMJITIAAAAAG4ROnTqld+/e6d27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\n"
     },
     "metadata": {
      "image/png": {
       "width": 712,
       "height": 424
      },
      "needs_background": "light"
     }
    }
   ],
   "source": [
    "with openpifpaf.show.canvas() as ax:\n",
    "    ax.hist(data['train'], bins=50, range=(20, 500), density=True, color='lightgray', label='train')\n",
    "    ax.hist(data['eval'], bins=50, range=(20, 500), density=True, histtype='step', lw=2, label='eval 641px')\n",
    "    ax.hist(data['eval321'], bins=50, range=(20, 500), density=True, histtype='step', lw=2, label='eval 321px')\n",
    "    ax.legend()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ]
}